<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JS闭包</title>
</head>

<body>
  <script>
    /**
     * 形成闭包的两个条件
     * 1. 函数里面返回一个复杂数据类型（对象，数组，函数……）
     * 2. 外面有个变量来引用返回的复杂数据类型
     * 
     */

    function test1() {
      var a = 0;
      // 返回一个复杂数据类型（对象，数组，函数……）
      return {
        add() {
          a++;
        },
        get a() {
          return a;
        },
        set a(val) {
          a = val;
        }
      }
    }

    let b = test1();
    b.add();
    b.add();
    console.log("a", b.a);
  </script>
</body>

</html>